﻿using System;
using System.Collections.Generic;
using System.Web;

using WebDS.CDBNames;
using WebDS;
using WebUS;
using System.Web.UI.WebControls;
using System.Web.UI;

/// <summary>
/// Thực hiện việc phân quyền cho Page
/// </summary>
public class PhanQuyenUtils
{
	public PhanQuyenUtils()
    {
    }

    #region Members
    #endregion

    /// <summary>
    /// Hàm này thực hiện việc phân quyền cho nhóm ở page (chỉ set các control
    /// </summary>
    /// <param name="i_page_name">Tên của form: vd: f200_dm_tu_dien.aspx</param>
    /// <param name="ip_dc_id_nhom_quyen">ID nhóm quyền đc set</param>
    public static void phan_quyen_page_cho_nhom(Page ip_page, string i_page_name, decimal ip_dc_id_nhom_quyen)
    {
        US_V_HT_PHAN_QUYEN_PAGE_CHO_NHOM v_us_v_ht_phan_quyen_page_cho_nhom = new US_V_HT_PHAN_QUYEN_PAGE_CHO_NHOM();
        DS_V_HT_PHAN_QUYEN_PAGE_CHO_NHOM v_ds_v_ht_phan_quyen_page_cho_nhom = new DS_V_HT_PHAN_QUYEN_PAGE_CHO_NHOM();

        v_us_v_ht_phan_quyen_page_cho_nhom.get_phan_quyen_page_cho_nhom(v_ds_v_ht_phan_quyen_page_cho_nhom
                                                                        , ip_dc_id_nhom_quyen
                                                                        , i_page_name, "");
        
        // Khi người dùng này ko có quyền sử dụng bắt cứ control nào trong Page
        if (v_ds_v_ht_phan_quyen_page_cho_nhom.V_HT_PHAN_QUYEN_PAGE_CHO_NHOM.Rows.Count == 0)
        {
            //cái này phải để cho ko xảy ra. Bất cứ nút nào cũng phải phân quyền
        }
        else
        {
            if (ip_page.Page.HasControls())
            {
                Control v_control;
                GridView v_gridview;
                for (int v_i = 0; v_i < v_ds_v_ht_phan_quyen_page_cho_nhom.V_HT_PHAN_QUYEN_PAGE_CHO_NHOM.Rows.Count; v_i++)
                {
                    v_control = ip_page.Master.FindControl("MainContent").FindControl(v_ds_v_ht_phan_quyen_page_cho_nhom.V_HT_PHAN_QUYEN_PAGE_CHO_NHOM.Rows[v_i][V_HT_PHAN_QUYEN_PAGE_CHO_NHOM.CONTROL_NAME].ToString());

                    if (v_ds_v_ht_phan_quyen_page_cho_nhom.V_HT_PHAN_QUYEN_PAGE_CHO_NHOM.Rows[v_i][V_HT_PHAN_QUYEN_PAGE_CHO_NHOM.VISIBLE_YN].ToString().Equals("Y"))
                        v_control.Visible = true;
                    else v_control.Visible = false;

                    if (v_ds_v_ht_phan_quyen_page_cho_nhom.V_HT_PHAN_QUYEN_PAGE_CHO_NHOM.Rows[v_i][V_HT_PHAN_QUYEN_PAGE_CHO_NHOM.CONTROL_TYPE].ToString().Equals(CONTROL_TYPE.GRIDVIEW))
                    {
                        v_gridview = (GridView)v_control;
                        v_gridview.Columns[Convert.ToInt32(v_ds_v_ht_phan_quyen_page_cho_nhom.V_HT_PHAN_QUYEN_PAGE_CHO_NHOM.Rows[v_i][V_HT_PHAN_QUYEN_PAGE_CHO_NHOM.COL_NUMBER])].Visible = false;
                    }
                }
            }
        }
    }
    
    /// <summary>
    /// Hàm này thực hiện việc kiểm tra xem người dùng này có quyền sử dụng chức năng ko?
    /// </summary>
    /// <param name="i_page_name">Tên của Page chức năng</param>
    /// <param name="ip_dc_id_nhom_quyen">Nhóm quyền</param>
    public static bool is_having_quyen_page(string i_page_name, decimal ip_dc_id_nhom_quyen)
    {
        US_HT_QUYEN_GROUP v_us_quyen_group = new US_HT_QUYEN_GROUP();
        DS_HT_QUYEN_GROUP v_ds_quyen_group = new DS_HT_QUYEN_GROUP();
        v_us_quyen_group.load_chuc_nang_by_nhom_quyen_chuc_nang(v_ds_quyen_group
                                                                , ip_dc_id_nhom_quyen
                                                                , i_page_name);
        
        if(v_ds_quyen_group.HT_QUYEN_GROUP.Rows.Count > 0) return true;
        
        return false;
    }
}